package com.lvmama.dest.schedule.tasks.demo;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.lvmama.dest.schedule.tasks.demoVo.SuppGoods;
import com.lvmama.dest.schedule.tasks.demoVo.SuppGoodsService;
import com.taobao.pamirs.schedule.IScheduleTaskDealSingle;
import com.taobao.pamirs.schedule.TaskItemDefine;

/**
 * 更新供应商商品的可售状态
 * 页面传入供应商id 和 可售状态
 * @author HP
 *
 */
@Component
public class DemoTest2 implements IScheduleTaskDealSingle<SuppGoods>{
	
	private final Logger logger = Logger.getLogger(this.getClass());

	@Autowired
	SuppGoodsService suppGoodsService;
	
	/** 
	* @Description: 获取任务的比较器,只有在NotSleep模式下需要用到
	* @return
	* @author xiachengliang
	* @date 2017年6月22日 下午5:30:23 
	*/
	@Override
	public Comparator<SuppGoods> getComparator() {
		logger.info("getComparator");
		return null;
	}

	/** 
	* @Description: 根据条件，查询当前调度服务器可处理的任务	
	* @param taskParameter 任务的自定义参数，字符串类型，可以在页面传入执行任务所需的各个参数的字符串集合，然后在这里拆解（如：param1，param2，param3,..）
	* @param ownSign 当前环境名称
	* @param taskItemNum 任务项数量
	* @param taskItemList 集合中TaskItemDeftaskParameterine的id值对应任务项值
	* @param eachFetchDataNum 每次获取数据的数量
	* @return
	* @throws Exception
	* @author xiachengliang
	* @date 2017年6月22日 下午5:14:03 
	*/
	@Override
	public List<SuppGoods> selectTasks(String taskParameter, String ownSign, int taskItemNum,
           List<TaskItemDefine> taskItemList, int eachFetchDataNum)throws Exception {
		List<SuppGoods> result = new ArrayList<SuppGoods>();
		String[] taskParams = taskParameter.split(",");//taskParameter = "1,N" 1代表供应商是艺龙，N 代表需要需要把供应商商品更新成不可售
		Map<String,Object> params = new HashMap<String,Object>();
		//传入的供应商的id
		params.put("supplierId", taskParams[0]);
		//每次处理的数据量，从页面传入，根据实际情况填写
		params.put("size", eachFetchDataNum);
		//关闭或开启商品可售状态，由页面传入参数决定
		if(taskParams[1].equals("Y")){
			params.put("saleFlag", "N");
		}else{
			params.put("saleFlag", "Y");
		}
		List<SuppGoods> goodsList = suppGoodsService.findGoodsListByParams(params);
		if( goodsList != null && goodsList.size() > 0){
			for(SuppGoods suppGoods:goodsList){
				suppGoods.setSaleFlag(taskParams[1]);
			}
		}
		result.addAll(goodsList);
		return result;
	}

	/** 
	* @Description: 执行单个任务 
	* @param task  任务
	* @param ownSign 当前环境名称,没什么用。
	* @return
	* @throws Exception
	* @author xiachengliang
	* @date 2017年6月22日 下午5:30:43 
	*/
	@Override
	public boolean execute(SuppGoods suppGoods, String ownSign) throws Exception {
		suppGoodsService.updateSuppGoods(suppGoods);
		return true;
	}

}
